package com.liqi.items.service;

import com.liqi.items.domain.TCfgService;
import com.liqi.items.domain.TCfgSubject;

import java.util.List;
import java.util.Map;

/**
 * 事项Service接口
 *
 * @author ruoyi
 * @date 2022-04-08
 */
public interface ITCfgServiceService
{
    /**
     * 查询事项
     *
     * @param id 事项主键
     * @return 事项
     */
    public TCfgService selectTCfgServiceById(Long id);

    /**
     * 查询事项列表
     *
     * @param tCfgService 事项
     * @return 事项集合
     */
    public List<TCfgService> selectTCfgServiceList(TCfgService tCfgService);

    /**
     * 新增事项
     *
     * @param tCfgService 事项
     * @return 结果
     */
    public int insertTCfgService(TCfgService tCfgService);

    /**
     * 修改事项
     *
     * @param tCfgService 事项
     * @return 结果
     */
    public int updateTCfgService(TCfgService tCfgService);

    /**
     * 构造事项与网点的一一对应list，方便插入关联表
     * @param tCfgService
     * @param branchCodes
     * @return
     */
    public List<TCfgService> getServiceList(TCfgService tCfgService, String[] branchCodes);
    /**
     * 批量删除事项
     *
     * @param ids 需要删除的事项主键集合
     * @return 结果
     */
    public int deleteTCfgServiceByIds(Long[] ids);

    public int SoftdeleteTCfgServiceByIds(Map<String, Object> map);

    /**
     * 删除事项信息
     *
     * @param id 事项主键
     * @return 结果
     */
    public int deleteTCfgServiceById(Long id);

    /**
     * 通过主题编码 查询事项列表
     *
     * @param subjectCode 主题编码
     * @return 事项集合
     */
    public List<TCfgService> selectTCfgServiceByItemCode(TCfgSubject tCfgSubject);

    /**
     * 通过主题 查询出排除已于当前主题关联的事项列表
     *
     * @param subjectCode 主题编码
     * @return 事项集合
     */
    public List<TCfgService> selectTCfgServiceListExcludeExistItemCode(String branchCode, String serviceName, String subjectCode,String deptName);

    /**
     * 获取关联事项
     */
    /*List<Map<String, Object>> selectReactTCfgServiceList();*/

    /**
     * 新增事项时若勾选网点,则调用该方法进行批量插入关联表
     * @param tCfgServices
     * @return
     */
    int batchServiceAndBranch(List<TCfgService> tCfgServices);


    /**
     * 编辑事项时若勾选网点,则调用该方法进行删除已有插入关联表
     * @param serviceCode
     * @return
     */
    int deleteBranchsByServiceCode(String serviceCode);

    /**
     * 批量根据事项id删除网点，事项关联
     * @param ids
     */
    void batchDeleteServiceandBranch(Long[] ids);

    /**
     * 通过id 查询事项编码
     * @param ids
     */
    List<String> getServiceByIds(Long[] ids);

    /**
     * 查找已经存在设备管理后台的关联事项编码
     * @return
     */
    /*String[] selectReactTCfgServiceCodesExistInDeviceDB();*/

    /**
     * 根据事项编码数组过滤已添加的事项
     * @param
     * @return
     */
   /* List<Map<String, Object>> selectReactTCfgServiceListFilterByServiceCodes(String[] reactServiceCodesExist);*/

    /**
     * 获取主库所有事项的事项编码serviceCode
     * @return
     */
    List<String> selectServiceCode();

    /**
     * 根据关联关系 过滤已关联过 的事项 ,即排除 主库所有事项的事项编码
     * @return
     */
    List<Map<String, Object>> selectReactTCfgServiceListFilterByRelation(String serviceName, String serviceCode);

    /**
     * 修改远程库的relation关联状态
     * @param map 所需要的 mybatis参数
     * @return
     */
    /*public int relationTCfgService(Map<String, String> map);*/

    /**
     * 删除事项与网点关联关系
     * @return
     */
    public int deleteServiceBranchInServiceCodes(Map<String, Object> map);

    /**
     * 通过网点编码 查询事项列表
     *
     * @param branchCode
     * @return
     */
    public List<TCfgService> selectTCfgServiceByBranchCode(TCfgService tCfgService);

    /**
     * 通过排除关联的网点编码 查询事项列表
     *
     * @param branchCode
     * @return
     */
    public List<TCfgService> selectTCfgServiceListExcludeExistBranchCode(String branchCode, String serviceName, String deptName);

    Integer count(String serviceCode);

    int updateByServiceCode(TCfgService tCfgService);

}
